import flask
from concurrent.futures import ProcessPoolExecutor
import math
import json

app = flask.Flask(__name__)


def is_prime(n):
    if n < 2:
        return False
    if n == 2:
        return True
    if n % 2 == 0:
        return False
    sqrt_n = int(math.floor(math.sqrt(n)))
    for i in range(3, sqrt_n + 1, 2):
        if n % i == 0:
            return False
    return True


@app.route("/is_prime/<numbers>")  # 接口     写入示例：
def spi_is_prime(numbers):  # 传入数字列表
    number_list = [int(x)
                   for x in numbers.split(",")]
    results = process_pool.map(is_prime, number_list)
    return json.dumps(dict(zip(number_list, results)))  # 字典


if __name__ == "__main__":  # 还要把方法定义到main函数里面，加上if语句
    process_pool = ProcessPoolExecutor()  # 在定义pool之前，所有依赖函数必须已经全部定义完，所以必须放在最下面
    app.run()

# 对比多线程：
# 多线程非常常用，大多数情况下多线程就可以满足需求
# 多进程用于应对cpu密集型计算，大多数情况还需要查资料
